In a typical computer program, the architecture of the in-memory data representation is provided within the binary code (or bytecode) which a compiler produces by compiling the program's source code. Modern programs are almost all written in a high level programming language. A variety of languages exist, and allow programmers to write code a in human-friendly syntax. Examples of programming languages are C/C++, PASCAL, FORTRAN, ADA etc. A high level language essentially provides an easy to read and write syntax for describing computing operations. Furthermore, some high level languages (e.g. C++ and JAVA) may implement object oriented concepts such as the concept of objects itself, the concept of inheritance etc. Object oriented concepts allow programmers to design better data storage architectures, and implement code that is easy to manipulate and reuse.
Every high-level based source code has to be compiled with a compiler. A compiler analyzes the source code and generates executable code that computers are able to execute. However, not every high-level programming language is destined to be executed directly by a machine. For example, the JAVA programming language may be compiled into bytecode that is then run by a JAVA virtual machine, which is a computer program capable of translation bytecode into machine specific execution instructions. Other high-level programming languages are designed to be interpreted at run time. For example, the PERL and SHELL provide scripting languages. The programs are interpreted at run time by an interpreter.
Whether a programming language is destined to be compiled, translated or interpreted, the steps for declaring data architecture and creating associating computing operations with the data almost always follows the same path: the programmer inputs all the definitions of the data and the association with operations in the source code, and the high-level instructions are translated into computer executable instructions. For example, a variable may be declared with a name and a type in the source. The compiler reads the variable declaration in the source code and generates executable code that reserves a memory space of a predetermined size, and executable code for generating the memory location address. The size of the memory allocated during execution, is determined by one or both of two factors. First, the programming language may have a standard definition of the basic data types, and second the data size may depend on the hardware architecture of each platform. Hence, integers that may be represented by sixteen (16) bits (two bytes) on one hardware platform and by thirty two (32) bits (four bytes) on a different hardware architecture.
Data declarations in computer programs typically define variable names their type and sometimes their positions in relation to each other. Several concepts are implemented in existing high-level programming languages. At the basic level, a data structure may consist of a simple variable (e.g. an integer) implemented through a name and a size, or through a complex description of data entities. Examples of higher-level data descriptions include arrays, data structures and objects. Arrays are ensembles of equally sized memory spaces represented in the computer memory by a contiguous space of memory where each location can be addressed individually or using an offset from the beginning of the array using one or multiple dimensions schemes. Complex data structures contain data of different sizes, each of which may be addressed using an offset from the beginning of the data structure using pointers. Objects typically include data declarations and code for manipulating the data.
In existing programming schemes, a computer application must always include the definition declarations of the data in the source code in order to be included in the binary code. The obvious shortcoming of this approach is that the architecture of data structures may not be changed in the executable code. If a change is to be applied to the structure of the data, the source code has to be modified, and compiled de novo to generate executable code capable of representing the data.
Therefore, there is a need for a method that allows data manipulation in computer programs without involving the process of generating the executable code.